package com.seventh7.mybatis.locator;

import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiMethod;
import com.seventh7.mybatis.util.JavaUtils;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

/**
 * @author yanglin
 */
public class MapperLocator {

  public static LocateStrategy dfltLocateStrategy = new PackageLocateStrategy();

  public static MapperLocator getInstance(@NotNull Project project) {
    return ServiceManager.getService(project, MapperLocator.class);
  }

  public boolean process(@Nullable PsiMethod method) {
    return null != method && process(method.getContainingClass());
  }

  public boolean process(@Nullable PsiClass clazz) {
    return null != clazz && JavaUtils.isElementWithinInterface(clazz) && dfltLocateStrategy.apply(clazz);
  }

}
